<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Document</title>
    <script src="../vue.js"></script>
  </head>

  <body>
    <div id="app">
      <button @click="person.name='李四'">改变名字</button>
      <button @click="count++">改变count</button>
      <p>{{person.name}}--{{person.age}}</p>
      <p>{{count}}</p>
    </div>
    <script>
      Vue.config.productionTip = false;

      const vm = new Vue({
        el: "#app",
        data() {
          return {
            person: {
              name: "小王",
              age: 18,
            },
            count: 0,
          };
        },
        watch: {
          /* 
            watch的侦听函数接受两个参数 分别是 新值 和 旧值
            */
          count(newVal, oldVal) {
            console.log(newVal, oldVal);
          },
          person: {
            deep: true,
            //如果watch侦听的是一个对象 当对象内部的属性发生变化的时候 新值和旧值是一样的 因为对象的地址没有发生变化
            handler(newVal,oldVal){
                console.log(newVal,oldVal);
            }
          },
        },
      });
    </script>
  </body>
</html>
